/**
*FileContentManager is a Java based file manager desktop application, 
*it can show, edit and manipulate the content of the files archived inside a zip.
*
*Copyright (C) 2007 
*
*Created by Camila Sanchez [http://mimix.wordpress.com/], Rafael Naufal [http://rnaufal.livejournal.com] and Rodrigo [rdomartins@gmail.com]
*
*FileContentManager is free software; you can redistribute it and/or
*modify it under the terms of the GNU Lesser General Public
*License as published by the Free Software Foundation; either
*version 2.1 of the License, or (at your option) any later version.
*
*This library is distributed in the hope that it will be useful,
*but WITHOUT ANY WARRANTY; without even the implied warranty of
*MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
*Lesser General Public License for more details.
*
*You should have received a copy of the GNU Lesser General Public
*License along with FileContentManager; if not, write to the Free Software
*Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package br.com.jteam.jfcm.gui.menu;

import java.awt.event.ActionListener;

import javax.swing.JMenuItem;

/**
 * F&aacute;brica base de itens de menu.
 */
public abstract class AbstractMenuItemFactory
{
	/**
	 * 
	 * @param text
	 *            Texto a ser exibido no item de menu.
	 * @return True caso o texto seja v&aacute;lido e False caso contr&aacute;rio.
	 */
	protected boolean isValidText(String text)
	{
		return text != null && text.trim().length() > 0;
	}

	/**
	 * 
	 * @param mnemonic
	 *            Car&aacute;cter utilizado como tecla de atalho para acesso ao item de
	 *            menu.
	 * @return True caso o mnemonic seja v&aacute;lido e False caso contr&aacute;rio.
	 */
	protected boolean isValidMnemonic(Character mnemonic)
	{
		return mnemonic != null && Character.isLetterOrDigit(mnemonic);
	}

	/**
	 * 
	 * @param listener
	 *            Listener a ser vinculado ao item de menu.
	 * @return True caso o listener seja v&aacute;lido e False caso contr&aacute;rio.
	 */
	protected boolean isValidActionListener(ActionListener listener)
	{
		return listener != null;
	}

	/**
	 * 
	 * Cria um novo item de menu.
	 * 
	 * @param text
	 *            Texto a ser exibido no item de menu.
	 * @param mnemonic
	 *            Car&aacute;cter utilizado como tecla de atalho para acesso ao item de
	 *            menu.
	 * @param listener
	 *            Listener a ser vinculado ao item de menu.
	 * @return O item de menu criado.
	 */
	public abstract JMenuItem create(	String text,
										Character mnemonic,
										ActionListener listener);

	/**
	 * 
	 * @param type
	 *            Tipo de f&aacute;brica de itens de menu.
	 * @return A f&aacute;brica de menus do tipo requerido.
	 */
	public static AbstractMenuItemFactory getFactory(MenuType type)
	{
		if (type == MenuType.MENU_ITEM)
		{
			return new MenuItemFactory();
		}
		return new MenuFactory();
	}
}
